class Student(object):
    def __init__(self, name, score):
        self.__name = name
        self.__score = score

    def print_score(self):
        print('%s: %s' % (self.__name, self.__score))

    def get_grade(self):
        if self.__score >= 90:
            return 'A'
        elif self.__score >= 80:
            return 'B'
        else:
            return 'C'

    def get_name(self):
        return self.__name

    def set_name(self, name):
        self.__name = name

    def get_score(self):
        return self.__score

    def set_score(self, score):
        if 0 <= score <= 100:
            self.__score = score
        else:
            raise ValueError('bad score')


# 实例的变量名如果以__开头，就变成了一个私有变量（private），只有内部可以访问，外部不能访问
bart = Student('Bart Simpson', 90)

print(bart.get_score())
bart.set_score(80)
bart.print_score()
# bart.set_score(120)

print(bart._Student__name)
print(bart._Student__score)
# 变量名类似__xxx__的，也就是以双下划线开头，并且以双下划线结尾的，是特殊变量，特殊变量是可以直接访问的，不是private变量，


# __xxx 私有变量，不允许外部访问（可以通过instance._类名__变量名）
# _xxx  虽然我可以被访问，但是，请把我视为私有变量，不要随意访问
# __xxx__  特殊变量，特殊变量是可以直接访问的
